/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ivanbiz.dao.impl;

import com.ivanbiz.dao.PenjualanDAO;
import com.ivanbiz.helper.GlobalSession;
import com.ivanbiz.helper.HibernateUtil;
import com.ivanbiz.model.Item;
import com.ivanbiz.model.Kas;
import com.ivanbiz.model.KasAwal;
import com.ivanbiz.model.Penjualan;
import com.ivanbiz.model.Piutang;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author City_Z
 */
public class PenjualanDAOImpl extends GenericDAOImpl implements PenjualanDAO {

    @Override
    public void saveTransaksi(List list, Penjualan penjualans) throws Exception {
        try {
            HibernateUtil.beginTransaction();
            Session session = HibernateUtil.getSession();
            KasAwal kasAwal = (KasAwal) session.load(KasAwal.class, Long.parseLong("1"));
            Date date = GlobalSession.getLockDate();
            Date dateNew = new Date();
            date.setHours(dateNew.getHours());
            date.setMinutes(dateNew.getMinutes());
            date.setSeconds(dateNew.getSeconds());
            for (int x = 0; x < list.size(); x++) {
                Penjualan penjualan = (Penjualan) list.get(x);
                penjualan.setTypeBank(penjualans.getTypeBank());
                penjualan.setTypeTransaksi(penjualans.getTypeTransaksi());
                penjualan.setBayar(penjualans.getBayar());
                penjualan.setTotal(penjualans.getTotal());
                penjualan.setKembali(penjualans.getKembali());
                penjualan.setDateTransaksi(date);
                penjualan.setPembayaran(penjualans.getPembayaran());
                penjualan.setJatuhTempo(penjualans.getJatuhTempo());
                penjualan.setMemberCustomer(penjualans.getMemberCustomer());
                penjualan.setDP(penjualans.getDP());
                Item item = (Item) session.load(Item.class, penjualan.getItem().getId());
                item.setStock(item.getStock() - penjualan.getQuantity());
                Kas kas = new Kas();
                kas.setKodeBarcode(item.getKodeBarcode());
                kas.setHargaModal(item.getHargaModal());
                kas.setHargaJual(penjualan.getHargaJual());
                kas.setNamaItem(item.getNamaItem());
                kas.setQuantity(penjualan.getQuantity());
                kas.setKasAwal(kasAwal.getKasAwal());
                session.save(penjualan);
                session.update(item);
                session.save(kas);
            }
            if (null != penjualans.getPembayaran() && penjualans.getPembayaran().equals("Kredit")) {
                Piutang piutang = new Piutang();
                piutang.setNoTransaksi(penjualans.getNoTransaksi());
                piutang.setJatuhTempo(penjualans.getJatuhTempo());
                piutang.setSisaHutang(penjualans.getTotal() - penjualans.getDP());
                piutang.setCreatedDate(penjualans.getDateTransaksi());
                piutang.setCreatedBy(penjualans.getUserPenjualan());
                session.save(piutang);
            }
            HibernateUtil.commitTransaction();
        } catch (Exception e) {
            HibernateUtil.rollbackTransaction();
            throw e;
        } finally {
            HibernateUtil.closeSession();
        }
    }

    @Override
    public String getLastNoTransaksi() throws Exception {
        Penjualan penjualan = null;
        String noTransaksi = "";
        try {
            HibernateUtil.beginTransaction();
            Session session = HibernateUtil.getSession();
            Query query = session.createQuery("from com.ivanbiz.model.Penjualan p order by p.id desc");
            query.setFirstResult(0);
            query.setMaxResults(1);
            penjualan = (Penjualan) query.uniqueResult();
            if (penjualan != null) {
                noTransaksi = penjualan.getNoTransaksi();
            }
            HibernateUtil.commitTransaction();
        } catch (Exception e) {
            HibernateUtil.rollbackTransaction();
            throw e;
        } finally {
            HibernateUtil.closeSession();
        }

        return noTransaksi;
    }

    @Override
    public List getDataByLike(String dateAwal, String dateAkhir, String item) throws Exception {
        try {
            Session session = HibernateUtil.getSession();
            HibernateUtil.beginTransaction();
//            dateAwal.setHours(0);
//            dateAwal.setMinutes(0);
//            dateAwal.setSeconds(0);
//            dateAkhir.setHours(0);
//            dateAkhir.setMinutes(0);
//            dateAkhir.setSeconds(0);
            Query query = session.createQuery("from com.ivanbiz.model.Penjualan p where p.dateTransaksi >='" + dateAwal + "' and p.dateTransaksi <='" + dateAkhir + "' and item.namaItem like '%" + item + "%'");
            List list = query.list();
            HibernateUtil.commitTransaction();
            return list;
        } catch (Exception e) {
            HibernateUtil.rollbackTransaction();
            throw e;
        } finally {
            HibernateUtil.closeSession();
        }
    }
}
